package com.ruoyi.product.mapper;

import com.ruoyi.manufacturer.domain.DjManufacturer;
import com.ruoyi.product.domain.PictureMemory;
import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.product.domain.ProductRelation;
import com.ruoyi.productProof.domain.ProductProof;
import com.ruoyi.sale.domain.SaleGoodsModel;
import com.ruoyi.scope.domain.Scope;
import com.ruoyi.warehousing.domain.Warehousing;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
@Mapper
public interface ProductMapper {

    List<Product> selectXxList(Product product);

    List<Product> selectSQList(Product product);

    List<Product> selectAuditSqList(Product product);

    List<Product> selectProductProofListes(List<Map> saleGoodsModelMaps);

    List<Product> selectCompanyProduct(Product product);

    ProductModel selectModelByType(SaleGoodsModel saleGoodsModel);

    Product selectProductBysaleGoodsModel(SaleGoodsModel saleGoodsModel);

    /**
     * 查询产品信息
     *
     * @return 结果
     */
    List<Product> selectProductList(Product product);

    List<Product> selectProducSqtList(Product product);

    List<Product> selectTimeList(@Param("productId") Long productId, @Param("deptId") Long deptId);

    Product selectProductProof(Product product);

    Product selectProductProofByMap(Map map);

    List<Product> selectProductProofList(Product productProof);

    /**
     * 插入产品信息
     *
     * @param product 产品信息
     * @return 产品主键
     */
    int insertProduct(Product product);

    /**
     * 删除产品信息
     *
     * @param productId 产品信息主键
     * @return 结果
     */
    int removeProduct(Long productId);

    /**
     * 插入产品规格信息
     *
     * @param product 产品规格信息
     */
    int insertProductModel(ProductModel product);

    int insertProductId(Product product);

    int insertProductSqId(Product product);

    int updateProductId(Product product);


    public  void updateproductProofName(Product product);

    /**
     * 产品规格图品信息
     *
     * @param pictureMemory 产品规格图片信息
     */
    int insertPictureMemory(List<PictureMemory> pictureMemory);

    /**
     * 查询生产管理类别
     *
     * @param managementCategory 管理类别
     * @return 结果
     */
    List<Scope> selectManagementCategory(Long managementCategory);

    /**
     * 查询生产厂商
     *
     * @return 结果
     */
    List<DjManufacturer> selectManufacturer(Long companyId);

    /**
     * 查询产品信息
     *
     * @param productId 产品信息主键
     * @return 结果
     */
    Product selectProductById(Product product);


    List<Product> selectAllProductList(Product product);

    /**
     * 查询产品明细
     *
     * @param productId 产品主键
     * @return 结果
     */
    List<ProductModel> selectProductByModelId(Product productId);

    /**
     * 修改产品信息
     *
     * @param product 产品信息
     * @return 结果
     */
    int updateProduct(Product product);

    int updateSqProduct(Product product);

    /*
    删除主表的信息
     */
    int deleteProduct(Long selectId);

    int updateSqid(Long selectId);

    int updateId0(Long companyId);

    /**
     * 查询产品图片信息
     *
     * @param modelNo 产品规格主键
     * @return 结果
     */
    List<PictureMemory> selectProductImg(Long modelNo);

    List<ProductRelation> selectProductRelation(Long productId);

    /**
     * 修改产品规格信息
     *
     * @param productModel 产品规格信息
     */
    void updateProductModel(ProductModel productModel);

    /**
     * 查询是否含有该产品规格主键的信息
     *
     * @param modelNo 产品规格主键
     * @return 结果
     */
    int selectProductByModel(Long modelNo);

    /**
     * 删除图片信息
     *
     * @param pictureNo 产品规格主键
     */
    void deletePictureMemory(Long pictureNo);

    void deletePictureMemoryList(List<Long> list);

    /**
     * 删除产品规格信息
     *
     * @param modelNo 结果
     */
    void deleteProductModel(Long modelNo);

    void deleteProductModelList(List<Long> list);

    /**
     * 统计同一公司下的医疗器械证是否唯一
     *
     * @param product 查询条件
     * @return 结果
     */
    Long selectMedicalNumber(Product product);

    /**
     * 根据产品规格的型号进行查询，不能重复
     *
     * @param productModel 产品规格信息
     * @return 结果
     */
    Long selectProductProductType(ProductModel productModel);

    /**
     * 根据产品规格的型号唯一码进行查询，不能重复
     *
     * @param productModel 产品规格信息
     * @return 结果
     */
    Long selectProductModelCode(ProductModel productModel);

    Long selectProductSelectId(Product product);


    /**
     * 查询图片主键
     *
     * @param productId 产品主键
     * @return 结果
     */
    List<Long> selectPictureMemoryByIds(Long productId);

    /**
     * 查询产品规格主键
     *
     * @param productId 产品主键
     * @return 结果
     */
    List<Long> selectProductModelByIds(Long productId);

    /**
     * 查询产品规格信息
     *
     * @param modelCode 产品型号唯一码
     * @return 结果
     */
    ProductModel selectProductByModelCode(Long supplierId, String modelCode);



    Product selectMedicalNumer(Long selectId);

    /**
     * 查询产品信息
     *
     * @param supplierId    的主键
     * @param medicalNumber 产品注册证
     * @return 结果
     */
    Product selectProductByMedical(Long supplierId, String medicalNumber);

    /**
     * PDA端 查询产品的共同型号及产品主键
     *
     * @param map 查询条件
     * @return 结果
     */
    List<Map<String, Object>> getIds(Map<String, Object> map);

    /**
     * 查询产品的规格型号信息
     *
     * @param product 查询条件
     * @return 结果
     */
    List<Long> selectProductModelByDeptId(Product product);

    /**
     * 查询产品的共同型号及产品主键
     *
     * @param map 查询条件
     * @return 结果
     */
    List<Map<String, Object>> getIdes(Map<String, Object> map);

    /**
     * 微信端 查询产品的共同型号及产品主键
     *
     * @param map 查询条件
     * @return 结果
     */
    List<Map<String, Object>> getIdss(Map<String, Object> map);

    /**
     * 微信端 查询产品的共同型号及产品主键
     *
     * @param map 查询条件
     * @return 结果
     */
    List<Map<String, Object>> getIdMap(Map<String, Object> map);

    /**
     * 查询是否有产品使用该供应商
     *
     * @param productModel 产品型号规格
     * @return 结果
     */
    List<ProductModel> selectProductModel(ProductModel productModel);

    public int addMateProductRelation(ProductRelation mateProductRelation);

    public  void  removeProductRelation(Long productId);

    public List<ProductRelation> selectMateProductId(Map<String,Object> resMap);

    public List<Product> selectProducts(Long deptId);

    public ProductModel selectProductModelByType(Map<String,Object> resMap);

    public Product selectProduction(Map<String,Object> resMap);

    public List<Product> selectMatureList(Long deptId);

    Integer updateByPiAPt(Map<String, Object> params);
}
